/*
 * ReplacementSelection.h
 *
 *  Created on: Oct 7, 2012
 *      Author: romina
 */

#ifndef REPLACEMENTSELECTION_H_
#define REPLACEMENTSELECTION_H_

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <iostream>
#include <string.h>
#include <sstream>
#include <exception>
#include "../Comunes/Directorio.h"
#include "../Comunes/Constantes.h"
#include "../Comunes/ArchivosManager.h"
#include "../Comunes/Palabra.h"
#include "Heap.h"
#include "Buffer.h"
#include "Particion.h"


using namespace std;
using namespace archivos;
using namespace palabra;

namespace ordenamiento {

class ReplacementSelection {
	ArchivoDeTexto * file_log;
	ArchivoBinario * file_input;
	Buffer* bufferLectura;
	Buffer* bufferOrdenamiento;
	Buffer* bufferEscritura;
	string path_particiones;
	Particion * particion;
	Heap * heap;
	int cant_part;
	//completa el buffer de ordenamiento
	//hasta completar su capacidad N o
	//hasta que sea fin de archivo
	void llenar_buffer_lectura();
	//completa el buffer de ordenamiento
	//con los registros del buffer de lectura
	//10*N
	void llenar_buffer_ordenamiento();
	//agrega registros a la particion actual
	void addToParticionFromBufferEscritura(bool is_last);
	//crea una particion con los registros
	//obtenidos desde el buffer de escritura
	void crear_particion();
	//cierra la particion actual
	void cerrar_particion();
public:
	ReplacementSelection(string path_input, string path_particiones);
	//algoritmo de seleccion y reemplazo
	void replace_selection();
	int get_cant_particiones();
	virtual ~ReplacementSelection();
};

} /* namespace ordenamiento */
#endif /* REPLACEMENTSELECTION_H_ */
